﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace CalculadoraEvandrex
{
    public partial class Form1 : Form
    {
        public TextBox[] MatrizA = new TextBox[4];
        public TextBox[] MatrizB = new TextBox[4];
        public TextBox[] MatrizC = new TextBox[4];
        public bool preenchido;

        public Form1()
        {
            InitializeComponent();
            Inicializar();
        }

        public void Inicializar()
        {
            MatrizA[0] = textBox1;
            MatrizA[1] = textBox2;
            MatrizA[2] = textBox3;
            MatrizA[3] = textBox4;

            MatrizB[0] = textBox10;
            MatrizB[1] = textBox11;
            MatrizB[2] = textBox12;
            MatrizB[3] = textBox13; 

            MatrizC[0] = textBox19;
            MatrizC[1] = textBox20;
            MatrizC[2] = textBox21;
            MatrizC[3] = textBox22;

            panel2.Enabled = false;
            panel2.Visible = false;
        }

        private void LimparMatrizA(object sender, EventArgs e)
        {
            for (int i = 0; i < MatrizA.Length; i++)
            {
                MatrizA[i].Text = null;
            }
        }

        private void LimparMatrizB(object sender, EventArgs e)
        {
            for (int i = 0; i < MatrizB.Length; i++)
            {
                MatrizB[i].Text = null;
            }
        }

        private void LimpaMatrizC(object sender, EventArgs e)
        {
            for (int i = 0; i < MatrizC.Length; i++)
            {
                MatrizC[i].Text = null;
            }
        }

        public void Checagem()
        {
            preenchido = false;

            for (int i = 0; i < MatrizA.Length; i++)
            {
                if (MatrizA[i].Text == "")
                {
                    MessageBox.Show("Preencha todos os elementos das matrizes A e B", "Erro de Sintaxe");
                    return;
                }
            }

            for (int i = 0; i < MatrizB.Length; i++)
            {
                if (MatrizB[i].Text == "")
                {
                    MessageBox.Show("Preencha todos os elementos das matrizes A e B", "Erro de Sintaxe");
                    return;
                }
            }

            for (int i = 0; i < MatrizA.Length; i++)
            {
                try
                {
                    double.Parse(MatrizA[i].Text);
                    double.Parse(MatrizB[i].Text);
                }
                catch
                {
                    MessageBox.Show("Preencha os elementos somente com números", "Erro de Sintaxe");
                    return;
                }
            }

            preenchido = true;
        }

        public void ChecagemMultiplicacao()
        {
            preenchido = false;

            for (int i = 0; i < MatrizA.Length; i++)
            {
                if (MatrizA[i].Text == "")
                {
                    MessageBox.Show("Preencha todos os elementos da matriz A", "Erro de Sintaxe");
                    return;
                }
            }

            for (int i = 0; i < MatrizA.Length; i++)
            {
                try
                {
                    double.Parse(MatrizA[i].Text);
                }
                catch
                {
                    MessageBox.Show("Preencha os elementos somente com números", "Erro de Sintaxe");
                    return;
                }
            }

            preenchido = true;
        }

        private void AsomaB(object sender, EventArgs e)
        {
            Checagem();

            if (preenchido)
            {
                for (int i = 0; i < MatrizA.Length; i++)
                {
                    MatrizC[i].Text = (double.Parse(MatrizA[i].Text) + double.Parse(MatrizB[i].Text)).ToString();
                }
            }
        }

        private void AsubtraiB(object sender, EventArgs e)
        {
            Checagem();

            if (preenchido)
            {
                for (int i = 0; i < MatrizA.Length; i++)
                {
                    MatrizC[i].Text = (double.Parse(MatrizA[i].Text) - double.Parse(MatrizB[i].Text)).ToString();
                }
            }
        }

        private void BsubtraiA(object sender, EventArgs e)
        {
            Checagem();

            if (preenchido)
            {
                for (int i = 0; i < MatrizA.Length; i++)
                {
                    MatrizC[i].Text = (double.Parse(MatrizB[i].Text) - double.Parse(MatrizA[i].Text)).ToString();
                }
            }
        }

        private void AmultiplicaB(object sender, EventArgs e)
        {
            Checagem();

            if (preenchido)
            {
                string c1x1 = ((double.Parse(MatrizA[0].Text) * double.Parse(MatrizB[0].Text)) + (double.Parse(MatrizA[1].Text) * double.Parse(MatrizB[2].Text))).ToString();
                string c1x2 = ((double.Parse(MatrizA[0].Text) * double.Parse(MatrizB[1].Text)) + (double.Parse(MatrizA[1].Text) * double.Parse(MatrizB[3].Text))).ToString();
                string c2x1 = ((double.Parse(MatrizA[2].Text) * double.Parse(MatrizB[0].Text)) + (double.Parse(MatrizA[3].Text) * double.Parse(MatrizB[2].Text))).ToString();
                string c2x2 = ((double.Parse(MatrizA[2].Text) * double.Parse(MatrizB[1].Text)) + (double.Parse(MatrizA[3].Text) * double.Parse(MatrizB[3].Text))).ToString();

                MatrizC[0].Text = c1x1;
                MatrizC[1].Text = c1x2;
                MatrizC[2].Text = c2x1;
                MatrizC[3].Text = c2x2;
            }
        }

        private void BmultiplicaA(object sender, EventArgs e)
        {
            Checagem();

            if (preenchido)
            {
                string c1x1 = ((double.Parse(MatrizB[0].Text) * double.Parse(MatrizA[0].Text)) + (double.Parse(MatrizB[1].Text) * double.Parse(MatrizA[2].Text))).ToString();
                string c1x2 = ((double.Parse(MatrizB[0].Text) * double.Parse(MatrizA[1].Text)) + (double.Parse(MatrizB[1].Text) * double.Parse(MatrizA[3].Text))).ToString();
                string c2x1 = ((double.Parse(MatrizB[2].Text) * double.Parse(MatrizA[0].Text)) + (double.Parse(MatrizB[3].Text) * double.Parse(MatrizA[2].Text))).ToString();
                string c2x2 = ((double.Parse(MatrizB[2].Text) * double.Parse(MatrizA[1].Text)) + (double.Parse(MatrizB[3].Text) * double.Parse(MatrizA[3].Text))).ToString();

                MatrizC[0].Text = c1x1;
                MatrizC[1].Text = c1x2;
                MatrizC[2].Text = c2x1;
                MatrizC[3].Text = c2x2;
            }
        }

        private void AmultiplicaNumero(object sender, EventArgs e)
        {
            ChecagemMultiplicacao();

            if (preenchido)
            {
                panel2.Enabled = true;
                panel2.Visible = true;
            }
        }

        private void ClickOk(object sender, EventArgs e)
        {
            try
            {
                double.Parse(textBox23.Text);
            }
            catch
            {
                MessageBox.Show("Preencha o elemento somente com números", "Erro de Sintaxe");
                return;
            }

            for (int i = 0; i < MatrizA.Length; i++)
            {
                MatrizC[i].Text = (double.Parse(MatrizA[i].Text) * double.Parse(textBox23.Text)).ToString();
            }
            
            panel2.Enabled = false;
            panel2.Visible = false;
        }

        private void Sobre(object sender, EventArgs e)
        {
            MessageBox.Show("Feito por:\nGustavo Silva\nIgor Silva\nThâmara Chedid\nHugo Renzi\nPablo Alexandre\n\nTurma 2003","Calculadora de Matrizes V1.0");
        }
    }
}
